package main

import "fmt"

/*
go定义变量
1、go属于静态语言，定义变量必须先定义后使用，变量必须要有类型，类型定义下来之后不能改变
*/
/*声明全局变量*/
var a int    //init 类型声明后没初始值，默认为0
var b string //tring 声明后没初始值，默认为空字符串
var c bool   //bool 声明后没初始化，值默认为false

func main() {
	//定义局部变量的方式，局部变量定义之后一定要使用
	/* 1、var 变量名 类型 */
	var name string          // 定义string类型变量
	name = "张三"              //变量赋值
	fmt.Println("姓名：", name) // 使用变量，不使用的话定义处会标红

	/* 2、声明变量并初始化 var 变量名 类型() */
	var age1 int = 18
	//如上可以看到类型是灰色，因为var在声明并赋值的时候可以省略类型，进行变量类型推断

	/*3、变量类型推断 */
	var age2 = 19
	fmt.Println("age1", age1, "age2", age2)

	/*简短声明初始化值 变量名 := 初始化值，定义全局变量的时候不能用该方法*/
	age3 := 20
	fmt.Println("age3", age3)

	/*定义多个不同变量 */
	var (
		name2 = "小明"
		age5  = 22
	)
	fmt.Println(name2, age5)

	/*定义多个同变量 */
	var name5, name6 string
	name5 = "小李"
	name6 = "小张"
	fmt.Println(name5, name6)

	/*定义多个变量并推断类型*/
	var name7, age4, name8 = "jiang", 33, "su"
	fmt.Println(name7, age4, name8)
	name9, age5 := "jian", 90
	fmt.Println(name9, age5)

	fmt.Println(c)
}

// 一般使用变量类型推断和简短声明的方式定义变量，局部变量定义之后一定要使用，全局变量可以不使用
